package com.bootdo.app.controller;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;

import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import com.alibaba.fastjson.JSONObject;
import com.bootdo.app.common.utils.DateUtil;
import com.bootdo.app.common.utils.PayUtil;
import com.bootdo.app.common.utils.TemplateParam;
import com.bootdo.app.common.utils.WXPay;
import com.bootdo.app.common.utils.WeChatConfig;
import com.bootdo.system.domain.TbWxuser;
import com.bootdo.system.domain.Template;
import com.bootdo.system.service.WxUserService;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;

/**
 * @author ChenXi
 * @date 2018/9/17 14:09
 */
@Api(value = "WeChatController")
@Controller("WeChatController")
@CrossOrigin
public class WeChatController{

//	 @Autowired
//	    private WxUserService wxUserService;
//
//    @ResponseBody
//    @RequestMapping(value = "/rememberDoLogin", method = RequestMethod.POST, produces = "application/json;charset=utf-8")
//    @ApiOperation(value = "记住登录状态创建新用户结合版", httpMethod = "POST", notes = "记录登录状态", response = Result.class)
//    @ApiImplicitParam(paramType = "body", dataType = "String", name = "postData", value = "code")
//    public String rememberDoLogin(@RequestBody String postData, HttpServletRequest request) {
//        //创建工具类
//        WeChatConfig weChatConfig = new WeChatConfig();
//        JSONObject jsonObject = JSONObject.parseObject(postData);
//        //获取前端传来的USER对象
//        TbWxuser userPro = JSONObject.parseObject(postData, TbWxuser.class);
//        //获取前端传来code值
//        String code = userPro.getCode();
//        System.out.println("记录登录状态 code--:" + code);
//        try {
//            //根据code获取当前用户openId和unionid
//            Map map = weChatConfig.weChatGetOpenIdPro(code);
//            String openid = map.get("openid").toString();
//            System.out.println("记录登录状态 openid--:" + openid);
//
//            if (map.containsKey("unionid")) {
//                //如果存在unionid则通过unionid查找相应对象
//            	TbWxuser user = wxUserService.selectUserInfoByUnionid(map.get("unionid").toString());
//                //情况1,公众号登陆过,小程序也登陆过
//                if (user != null && user.getOpenid() != null) {
//                    //更新最后登录时间
//                    user.setLoginTime(DateUtil.formatLongDateTime(new Date()));
//                    //更新最后登录时的IP
//                    user.setLoginIp(WXPay.getIpAddr(request));
//                    //更新操作
//                    userService.updateUser(user);
//                }
//
//                //情况2,公众号登陆过,小程序第一次登陆
//                if (user != null && user.getOpenId() == null) {
//                    user.setOpenId(openid);
//                    //更新最后登录时间
//                    user.setLoginTime(DateUtil.formatLongDateTime(new Date()));
//                    //更新最后登录时的IP
//                    user.setLoginIp(WXPay.getIpAddr(request));
//                    //更新操作
//                    userService.updateUser(user);
//                }
//
//                //JWT验证
//                JwtUtil jwtUtil1 = new JwtUtil();
//                //过期时间
//                String jwt = jwtUtil1.createJWT(String.valueOf(user.getUserId()), 300000000L);
//                CommonResponse commonResponse = new CommonResponse();
//                commonResponse.setToken(jwt);
//                commonResponse.setCode(0);
//                commonResponse.setData(user);
//                commonResponse.setMsg("success");
//                commonResponse.setCount("1");
//                return buildSuccessResultInfo(commonResponse, 1, "success");
//            }
//
//            //情况3,没有获取到unionid,只获取到openid
//            User user = userService.selectUserInfo(openid);
//            if (user != null) {
//                //更新最后登录时间
//                user.setLoginTime(DateUtil.formatLongDateTime(new Date()));
//                //更新最后登录时的IP
//                user.setLoginIp(WXPay.getIpAddr(request));
//                //更新操作
//                userService.updateUser(user);
//
//            } else {
//                //情况4:都是第一次登陆,则新建用户
//                //获取推荐人ID
//                String parentId = jsonObject.getString("parentId");
//                //如果没推荐人ID则置为0
//                if (parentId == null) {
//                    parentId = "0";
//                }
//                //获取用户注册来源
//                String registerSource = jsonObject.getString("registerSource");
//                //为空则为自己关注进入
//                if (registerSource == null) {
//                    registerSource = "4";
//                }
//                if (registerSource.equals("1")) {
//                    registerSource = "小程序分享";
//                }
//                if (registerSource.equals("2")) {
//                    registerSource = "二维码分享";
//                }
//                if (registerSource.equals("3")) {
//                    registerSource = "我的名片分享";
//                }
//                if (registerSource.equals("4")) {
//                    registerSource = "自行进入";
//                }
//                //赋值
//                userPro.setParentId(parentId);
//                userPro.setRegisterSource(registerSource);
//                userPro.setOpenId(openid);
//                //更新最后登录时间,更新注册时间
//                userPro.setLoginTime(DateUtil.formatLongDateTime(new Date()));
//                userPro.setRegisterTime(DateUtil.formatLongDateTime(new Date()));
//                //更新最后登录时的IP
//                userPro.setLoginIp(WXPay.getIpAddr(request));
//                //创建新用户
//                userService.addUser(userPro, null);
//            }
//            //JWT验证
//            JwtUtil jwtUtil1 = new JwtUtil();
//            //过期时间
//            String jwt = jwtUtil1.createJWT(String.valueOf(user.getUserId()), 300000000L);
//            CommonResponse commonResponse = new CommonResponse();
//            commonResponse.setToken(jwt);
//            commonResponse.setCode(0);
//            commonResponse.setData(user);
//            commonResponse.setMsg("success");
//            commonResponse.setCount("1");
//            return buildSuccessResultInfo(commonResponse, 1, "success");
//
//
//        } catch (Exception e) {
//            logger.error("classname:WeChatController,method:rememberDoLogin", e);
//
//        }
//        return buildFailedResultInfo("请求异常");
//    }
//
//    @ResponseBody
//    @RequestMapping(value = "/sendTemplateMessageMax", method = RequestMethod.POST, produces = "application/json; charset=utf-8")
//    @ApiOperation(value = "小程序消息模板", httpMethod = "POST", response = Result.class)
//    @ApiImplicitParam(paramType = "body", dataType = "String", name = "postData", value = "formId,openId,templateId,keyword1,keyword2,keyword3...")
//    public String sendTemplateMessagePro(@RequestBody String postData, HttpServletRequest request, HttpServletResponse response) throws IOException {
//        JSONObject jsonObject = JSONObject.parseObject(postData);
//        //获取formID 发送消息模板必须参数
//        String formId = jsonObject.getString("formId");
//        //获取接收方openID
//        String openId = jsonObject.getString("openId");
//        //获取消息模板ID
//        String templateId = jsonObject.getString("templateId");
//        //创建消息对象
//        Template tem = new Template();
//        // tem.setTemplateId("qBZ3BAC-Qs_LrcOqQ-NtVz7MM7bUKZ8ZubweSM0Wphg");
//        //赋值
//        tem.setTemplateId(templateId);
//        tem.setFormId(formId);
//        tem.setTopColor("#00DD00");
//        // tem.setToUser("oA5fM4rLOTbXX30h_0OzvO0chho4");
//        tem.setToUser(openId);
//        tem.setUrl("");
//        //创建消息内容
//        List<TemplateParam> paras = new ArrayList<TemplateParam>();
//        String keyword1 = jsonObject.getString("keyword1");
//        if (keyword1 != null) {
//            paras.add(new TemplateParam("keyword1", keyword1, "#0044BB"));
//        }
//        String keyword2 = jsonObject.getString("keyword2");
//        if (keyword2 != null) {
//            paras.add(new TemplateParam("keyword2", keyword2, "#0044BB"));
//        }
//        String keyword3 = jsonObject.getString("keyword3");
//        if (keyword3 != null) {
//            paras.add(new TemplateParam("keyword3", keyword3, "#0044BB"));
//        }
//        String keyword4 = jsonObject.getString("keyword4");
//        if (keyword4 != null) {
//            paras.add(new TemplateParam("keyword4", keyword4, "#0044BB"));
//        }
//        String keyword5 = jsonObject.getString("keyword5");
//        if (keyword5 != null) {
//            paras.add(new TemplateParam("keyword5", keyword5, "#0044BB"));
//        }
//
////测试数据
////        paras.add(new TemplateParam("keyword1", "坤铭", "#0044BB"));
////        paras.add(new TemplateParam("keyword2", "2018-08-25", "#0044BB"));
////        paras.add(new TemplateParam("keyword3", "大李子", "#AAAAAA"));
//        tem.setTemplateParamList(paras);
//        //获取微信token
//        WeChat weChat = weChatService.selectByPrimaryKey(100);
//        //发送消息
//        boolean result = WeChatConfig.sendTemplateMsg(tem, weChat.getPartnerKey());
//        return buildSuccessResultInfo(result, 1, "success");
//
//    }
//
//
//    /**
//     * @param request
//     * @Description: 发起微信支付
//     */
//    @ResponseBody
//    @RequestMapping(value = "/wxPay", method = RequestMethod.POST, produces = "application/json;charset=utf-8")
//    @ApiOperation(value = "发起微信支付(小程序)", httpMethod = "POST", notes = "发起微信支付", response = Result.class)
//    @ApiImplicitParam(paramType = "body", dataType = "String", name = "postData", value = "code,totalFee,phone,goodsName")
//    public Map<String, Object> wxPay(@RequestBody String postData, HttpServletRequest request) {
//        WeChatConfig weChatConfig = new WeChatConfig();
//        try {
//            JSONObject jsonObject = JSONObject.parseObject(postData);
//            //获取openid
//            String code = jsonObject.getString("code");
//            String openId = weChatConfig.weChatGetOpenId(code);
//            //获取价格,单位为分
//            String totalFee = jsonObject.getString("totalFee");
//            //获取购买商品的名字
//            String goodsName = jsonObject.getString("goodsName");
//            //生成的随机字符串
//            String nonce_str = WXPay.getRandomStringByLength(32);
//            // String pro = WXPay.getRandomStringByLength(32);
//            String pro = jsonObject.getString("order");
//            //商品名称
//            String body = goodsName;
//            //获取客户端的ip地址
//            String spbill_create_ip = WXPay.getIpAddr(request);
//
//            //组装参数，用户生成统一下单接口的签名
//            Map<String, String> packageParams = new HashMap<String, String>();
//            packageParams.put("appid", WXPay.WxPayConfig.appid);
//            packageParams.put("mch_id", WXPay.WxPayConfig.mch_id);
//            packageParams.put("nonce_str", nonce_str);
//            packageParams.put("body", body);
//            packageParams.put("out_trade_no", pro);//商户订单号
//            packageParams.put("total_fee", totalFee);//支付金额，这边需要转成字符串类型，否则后面的签名会失败
//            packageParams.put("spbill_create_ip", spbill_create_ip);
//            packageParams.put("notify_url", WXPay.WxPayConfig.notify_url);//支付成功后的回调地址
//            packageParams.put("trade_type", WXPay.WxPayConfig.TRADETYPE);//支付方式
//            packageParams.put("openid", openId);
//            String prestr = PayUtil.createLinkString(packageParams); // 把数组所有元素，按照“参数=参数值”的模式用“&”字符拼接成字符串
//            //MD5运算生成签名，这里是第一次签名，用于调用统一下单接口
//            String mysign = PayUtil.sign(prestr, WXPay.WxPayConfig.key, "utf-8").toUpperCase();
//
//            //拼接统一下单接口使用的xml数据，要将上一步生成的签名一起拼接进去
//            String xml = "<xml>" + "<appid>" + WXPay.WxPayConfig.appid + "</appid>"
//                    + "<body><![CDATA[" + body + "]]></body>"
//                    + "<mch_id>" + WXPay.WxPayConfig.mch_id + "</mch_id>"
//                    + "<nonce_str>" + nonce_str + "</nonce_str>"
//                    + "<notify_url>" + WXPay.WxPayConfig.notify_url + "</notify_url>"
//                    + "<openid>" + openId + "</openid>"
//                    + "<out_trade_no>" + pro + "</out_trade_no>"
//                    + "<spbill_create_ip>" + spbill_create_ip + "</spbill_create_ip>"
//                    + "<total_fee>" + totalFee + "</total_fee>"
//                    + "<trade_type>" + WXPay.WxPayConfig.TRADETYPE + "</trade_type>"
//                    + "<sign>" + mysign + "</sign>"
//                    + "</xml>";
//
//            System.out.println(xml);
//            System.out.println("----------");
//
//            //调用统一下单接口，并接受返回的结果
//            String result = PayUtil.httpRequest(WXPay.WxPayConfig.pay_url, "POST", xml);
//
//            System.out.println(result);
//
//            // 将解析结果存储在HashMap中
//            Map map = PayUtil.doXMLParse(result);
//
//            String return_code = (String) map.get("return_code");//返回状态码
//
//            Map<String, Object> response = new HashMap<String, Object>();//返回给小程序端需要的参数
//            if (return_code == "SUCCESS" || return_code.equals(return_code)) {
//                String prepay_id = (String) map.get("prepay_id");//返回的预付单信息
//                response.put("nonceStr", nonce_str);
//                response.put("package", "prepay_id=" + prepay_id);
//                Long timeStamp = System.currentTimeMillis() / 1000;
//                response.put("timeStamp", timeStamp + "");//这边要将返回的时间戳转化成字符串，不然小程序端调用wx.requestPayment方法会报签名错误
//                //拼接签名需要的参数
//                String stringSignTemp = "appId=" + WXPay.WxPayConfig.appid + "&nonceStr=" + nonce_str + "&package=prepay_id=" + prepay_id + "&signType=MD5&timeStamp=" + timeStamp;
//                //再次签名，这个签名用于小程序端调用wx.requesetPayment方法
//                String paySign = PayUtil.sign(stringSignTemp, WXPay.WxPayConfig.key, "utf-8").toUpperCase();
//                response.put("paySign", paySign);
//            }
//
//            response.put("appid", WXPay.WxPayConfig.appid);
//
//            return response;
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        return null;
//    }
//
//
//    /**
//     * @return
//     * @throws Exception
//     * @Description:微信支付
//     */
//    @ResponseBody
//    @RequestMapping(value = "/wxNotify", method = RequestMethod.POST, produces = "application/json;charset=utf-8")
//    @ApiOperation(value = "微信支付回调接口(小程序)", httpMethod = "POST", notes = "微信支付回调接口", response = Result.class)
//    @ApiImplicitParam(paramType = "query", dataType = "String", name = "postData", value = "mobile,userPassword")
//    public void wxNotify(HttpServletRequest request, HttpServletResponse response) throws Exception {
//        BufferedReader br = new BufferedReader(new InputStreamReader((ServletInputStream) request.getInputStream()));
//        String line = null;
//        StringBuilder sb = new StringBuilder();
//        while ((line = br.readLine()) != null) {
//            sb.append(line);
//        }
//        br.close();
//        //sb为微信返回的xml
//        String notityXml = sb.toString();
//        String resXml = "";
//        System.out.println("接收到的报文：" + notityXml);
//        Map map = PayUtil.doXMLParse(notityXml);
//
//        String returnCode = (String) map.get("return_code");
//        if ("SUCCESS".equals(returnCode)) {
//            //验证签名是否正确
//            //回调验签时需要去除sign和空值参数
//            Map<String, String> validParams = PayUtil.paraFilter(map);
//            //把数组所有元素，按照“参数=参数值”的模式用“&”字符拼接成字符串
//            String validStr = PayUtil.createLinkString(validParams);
//            //拼装生成服务器端验证的签名
//            String sign = PayUtil.sign(validStr, WXPay.WxPayConfig.key, "utf-8").toUpperCase();
//            //根据微信官网的介绍，此处不仅对回调的参数进行验签，还需要对返回的金额与系统订单的金额进行比对等
//            if (sign.equals(map.get("sign"))) {
//                /**此处添加自己的业务逻辑代码start**/
//                System.out.println("付款成功!!!!!!!!");
//                //获取openid
//                String openid = (String) map.get("openid");
//                //获取订单号
//                String order = (String) map.get("out_trade_no");
//                //根据订单号查询订单信息
//                OrderInfo orderInfoByOrder = orderService.getOrderInfoByOrder(order);
//                //更改订单支付状态
//                orderInfoByOrder.setPayCode("已支付");
//                //记录订单支付时间
//                orderInfoByOrder.setPayTime(DateUtil.formatLongDateTime(new Date()));
//                //支付方式
//                orderInfoByOrder.setPayMethod("微信支付");
//                //更新操作
//                orderService.updateOrderPro(orderInfoByOrder);
//                /**此处添加自己的业务逻辑代码end**/
//                //通知微信服务器已经支付成功
//                resXml = "<xml>" + "<return_code><![CDATA[SUCCESS]]></return_code>"
//                        + "<return_msg><![CDATA[OK]]></return_msg>" + "</xml> ";
//            }
//        } else {
//            System.out.println("付款失败~~~~~");
//            resXml = "<xml>" + "<return_code><![CDATA[FAIL]]></return_code>"
//                    + "<return_msg><![CDATA[报文为空]]></return_msg>" + "</xml> ";
//        }
//        System.out.println(resXml);
//        System.out.println("微信支付回调数据结束");
//
//        BufferedOutputStream out = new BufferedOutputStream(
//                response.getOutputStream());
//        out.write(resXml.getBytes());
//        out.flush();
//        out.close();
//    }
//
//
//    @ResponseBody
//    @RequestMapping(value = "/weChatMa", method = RequestMethod.POST, produces = "application/json;charset=utf-8")
//    @ApiOperation(value = "生成带参微信码", httpMethod = "POST", notes = "获取带参微信码", response = Result.class)
//    @ApiImplicitParam(paramType = "body", dataType = "String", name = "postData", value = "code,registerSource,path,goodsId")
//    public String weChatMa(@RequestBody String postData) {
//        WeChatConfig weChatConfig = new WeChatConfig();
//        JSONObject jsonObject = JSONObject.parseObject(postData);
//        //获取推荐人Id
//        String code = jsonObject.getString("code");
//        //获取当前openId
//        String openid = "";
//        User user = new User();
//        //获取商品ID
//        String goodsId = jsonObject.getString("goodsId");
//        try {
//            openid = weChatConfig.weChatGetOpenId(code);
//            user = userService.selectUserInfo(openid);
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//
//        if (user == null) {
//            user.setUserId(0);
//        }
//        //获取注册来源
//        String registerSource = jsonObject.getString("registerSource");
//        //拼接参数
//        String parameter = user.getUserId() + "." + registerSource + "." + goodsId;
//
//        //获取跳转路径
//        String path = jsonObject.getString("path");
//        //设置七牛key
//        String key = UUID.randomUUID() + ".png";
//
//        try {
//            //获取微信token
//            //String token = WeChatConfig.getAccessToken("wxdbeb0f99a6916fca", "da494996981b1fa9df048e0f3a0cfaa8");
//            String token = weChatService.selectByPrimaryKey(100).getPartnerKey();
//            //生成微信码并且保存到七牛云
//            Auth auth = Auth.create("ZeBcNA5xgTjr75B8ALgfS1fjtadwEdS1l0ivQDOx", "pTAGUi8jkNmpyEPV_3nd3DHvBUcyHTIKEw-WV22t");
//            String upToken = auth.uploadToken("3ccg");
//            URL url = new URL("https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" + token);
//            HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
//            httpURLConnection.setRequestMethod("POST");// 提交模式
//            // conn.setConnectTimeout(10000);//连接超时 单位毫秒
//            // conn.setReadTimeout(2000);//读取超时 单位毫秒
//            // 发送POST请求必须设置如下两行
//            httpURLConnection.setDoOutput(true);
//            httpURLConnection.setDoInput(true);
//            // 获取URLConnection对象对应的输出流
//            PrintWriter printWriter = new PrintWriter(httpURLConnection.getOutputStream());
//            // 发送请求参数
//            JSONObject paramJson = new JSONObject();
//            //添加参数  例:"a=1234567890"
//            paramJson.put("scene", parameter);
//            //设置点击访问路径 例:"pages/index/index"
//            paramJson.put("page", path);
//            paramJson.put("width", 430);
//            paramJson.put("auto_color", true);
//            printWriter.write(paramJson.toString());
//            // flush输出流的缓冲
//            printWriter.flush();
//            //开始获取数据
//            InputStream bufferedInputStream = new BufferedInputStream(httpURLConnection.getInputStream());
//            String s = QiNiuCloudManager.fileUpload(bufferedInputStream, key, upToken, null);
//        } catch (IOException e) {
//            logger.error("classname:WeChatController,method:rememberDoLogin", e);
//            return buildFailedResult();
//        }
//        return buildSuccessResultInfo(key, 1, "success");
//    }
//
//    @ResponseBody
//    @RequestMapping(value = "sendMessageMax", method = RequestMethod.POST, produces = "application/json;charset=utf-8")
//    @ApiOperation(value = "绑定手机获取验证码", httpMethod = "POST", notes = "绑定手机获取验证码", response = Result.class)
//    @ApiImplicitParam(paramType = "body", dataType = "String", name = "postData", value = "phone")
//    public String sendMessageMax(@RequestBody String postData, HttpServletRequest request) {
//        JSONObject jsonObject = JSONObject.parseObject(postData);
//        //获取要发送验证码的手机号
//        String phone = jsonObject.getString("phone");
//        try {
//            //判断该手机是否被绑定过
//            User user = userService.selectUserByPhoneMax(phone);
//            if (user != null) {
//                return buildFailedResultInfo("该手机已被绑定");
//            }
//            //发送验证码
//            String code = Send.sendSms(phone, 2, "success");
//            Map map = new HashMap();
//            map.put("code", code);
//            map.put("phone", phone);
//            return buildSuccessResultInfo(map, 1, "success");
//        } catch (Exception e) {
//            logger.error("classname:WeChatController,method:sendMessageMax", e);
//        }
//        return buildFailedResult();
//    }
//
//    @ResponseBody
//    @RequestMapping(value = "sendMessageOfDelivery", method = RequestMethod.POST, produces = "application/json;charset=utf-8")
//    @ApiOperation(value = "更改为发货并推送模板消息", httpMethod = "POST", notes = "发货推送模板消息", response = Result.class)
//    @ApiImplicitParam(paramType = "body", dataType = "String", name = "postData", value = "orderId,userId,formId,waybillNumber")
//    public String sendMessageOfDelivery(@RequestBody String postData) {
//        JSONObject jsonObject = JSONObject.parseObject(postData);
//        //获取订单编号
//        String orderId = jsonObject.getString("orderId");
//        //获取用户Id
//        Integer userId = jsonObject.getInteger("userId");
//        //获取订单号
//        String waybillNumber = jsonObject.getString("waybillNumber");
//        try {
//            //根据Id获取用户信息
//            User user = userService.selectUserInfoByUserId(userId);
//            //获取form表单ID用于发送模板消息
//            //从数据库查询formId对象
//            FormId formId1 = formIdService.selectFormId();
//            String formId = formId1.getNumber();
//            //通过订单查询订单详情
//            OrderInfo orderInfoByOrder = orderService.getOrderInfoByOrder(orderId);
//            //获取商品名
//            String goodsName = goodsService.getGoodsName(orderId);
//
//            if (waybillNumber != null) {
//                orderInfoByOrder.setWaybillNumber(waybillNumber);
//            }
//            //设置状态为已发货并记录发货时间
//            orderInfoByOrder.setOrderCode("已发货");
//            orderInfoByOrder.setDeliveryTime(DateUtil.formatLongDateTime(new Date()));
//            orderInfoByOrder.setWaybillNumber(waybillNumber);
//            //更新操作
//            orderService.updateOrderPro(orderInfoByOrder);
//            //获取微信token
//            String token = weChatService.selectByPrimaryKey(100).getPartnerKey();
//            //推送模板消息
//            Boolean aBoolean = WeChatConfig.sendTemplateMessageMax(user.getOpenId(), formId, "cz4opek_FACBptVin8o8M5lxtUiRQKNUhPTxJ-O6yKU", goodsName, orderInfoByOrder.getCreateTime(), orderId, waybillNumber, "UU跑腿", orderInfoByOrder.getDeliveryTime(), token);
//            if (aBoolean) {
//                //推送成功删除使用过的formId
//                formIdService.deleteFormIdById(formId1.getId());
//                return buildSuccessResult();
//            }
//        } catch (IOException e) {
//            logger.error("classname:WeChatController,method:sendMessageOfDelivery", e);
//        }
//        return buildFailedResult();
//    }
//
//
//    @ResponseBody
//    @RequestMapping(value = "sendMessageOfDeliveryByPhone", method = RequestMethod.POST, produces = "application/json;charset=utf-8")
//    @ApiOperation(value = "手机通知购买商品已发送", httpMethod = "POST", notes = "手机通知购买商品已发送", response = Result.class)
//    @ApiImplicitParam(paramType = "body", dataType = "String", name = "postData", value = "phone,orderId")
//    public String sendMessageOfDeliveryByPhone(@RequestBody String postData, HttpServletRequest request) {
//        JSONObject jsonObject = JSONObject.parseObject(postData);
//        //获取要发送验证码的手机号
//        String phone = jsonObject.getString("phone");
//        try {
//            //发送验证码
//            Send.sendSms(phone, 3, "success");
//            return buildSuccessResult();
//        } catch (Exception e) {
//            logger.error("classname:WeChatController,method:sendMessageMax", e);
//        }
//        return buildFailedResult();
//    }
//
//
//    @ResponseBody
//    @RequestMapping(value = "sendTemplateMessagePro", method = {RequestMethod.GET, RequestMethod.POST})
//    @ApiOperation(value = "关注推送图文获取用户信息保存到数据库(关注获取openId)")
//    public String attentionMessage(HttpServletRequest request, HttpServletResponse response) {
//
//        try {
//            Map<String, String> requestMap = null;
//            requestMap = WeChatConfig.parseXml(request);
//            for (String key : requestMap.keySet()) {
//                System.out.println("key= " + key + " and value= " + requestMap.get(key));
//            }
//            if (requestMap != null) {
//                String Event = requestMap.get("Event");
//                if (!Event.equals("subscribe")) {
//                    return buildFailedResult();
//                }
//                // 发送方帐号（open_id)
//                String fromUserName = requestMap.get("FromUserName");
//                //请求微信接口获取用户详细信息
//                //获取微信token
//                String accessToken = weChatService.selectByPrimaryKey(99).getPartnerKey();
//                User user = GetUser.getUserInfo(accessToken, fromUserName);
//                //设置登录IP
//                user.setLoginIp(GetIP.getIpAddress(request));
//                //添加用户
//                userService.addUser(user, null);
//                Articles art = new Articles();
//                art.setAccessToken(accessToken);
//                art.setDescription("点击-→我要购物←-进入3C采购商城");
//                art.setOpenid(fromUserName);
//                art.setPicurl("https://img.3ccg.com/3ccg.png");
//                art.setUrl("https://www.baidu.com");
//                //art.setMiniprogram("{\"appid\":\"wxdbeb0f99a6916fca\",\"pagepath\":\"pages/index/index\"}");
//                Articles[] arts = {art};
//                KfManager.Gotokf(arts);
//            }
//        } catch (Exception e) {
//            logger.error("classname:WeChatController,method:attentionMessage", e);
//
//        }
//        try {
//            // 微信加密签名
//            String signature = request.getParameter("signature");
//            // 时间戳
//            String timestamp = request.getParameter("timestamp");
//            // 随机数
//            String nonce = request.getParameter("nonce");
//            // 随机字符串
//            String echostr = request.getParameter("echostr");
//
//            if (signature != null && timestamp != null && nonce != null && echostr != null) {
//                PrintWriter out = response.getWriter();
//                // 与接口配置信息中的Token要一致
//                String token = "1122334455";
//                if (SignUtil.checkSignature(token, signature, timestamp, nonce)) {
//                    out.print(echostr);
//                }
//                out.close();
//                out = null;
//            }
//        } catch (Exception e) {
//            logger.error("classname:WeChatController,method:attentionMessage", e);
//        }
//        return buildSuccessResult();
//    }
//
//
//    @ResponseBody
//    @RequestMapping(value = "storageFormId", method = RequestMethod.POST, produces = "application/json;charset=utf-8")
//    @ApiOperation(value = "存储formId", httpMethod = "POST", notes = "存储formId(用于推送消息模板)", response = Result.class)
//    @ApiImplicitParam(paramType = "body", dataType = "String", name = "postData", value = "number,userId")
//    public String storageFormId(@RequestBody String postData) {
//        JSONObject jsonObject = JSONObject.parseObject(postData);
//        //获取前端传来的formId
//        String number = jsonObject.getString("number");
//        //获取相对应的用户ID
//        Integer userId = jsonObject.getInteger("userId");
//        try {
//            //如果怕数据量大可以限制每个用户存储多少个formId,还可以清理超过7天未使用的formId
//            //查询该用户已存储多少formId
//            int count = formIdService.selectFormIdCount(userId);
//            if (count >= 10) {
//                return buildSuccessResultInfo("存储量达到上限");
//            }
//            //获取当前时间戳
//            long l = System.currentTimeMillis();
//            //创建formId对象存储
//            FormId formId = new FormId();
//            formId.setNumber(number);
//            formId.setUserId(userId);
//            formId.setTime(l);
//            //存储
//            formIdService.addFormId(formId);
//            return buildSuccessResult();
//        } catch (Exception e) {
//            logger.error("classname:WeChatController,method:storageFormId", e);
//        }
//        return buildFailedResult();
//    }
//
//
//    @ResponseBody
//    @RequestMapping(value = "sendMessageByWhat", method = RequestMethod.POST, produces = "application/json;charset=utf-8")
//    @ApiOperation(value = "小程序OR公众号发送模板消息", httpMethod = "POST", notes = "小程序OR公众号发送模板消息", response = Result.class)
//    @ApiImplicitParam(paramType = "body", dataType = "String", name = "postData", value = "userId,orderId,waybillNumber,adminId")
//    public String seleteAdminUser(@RequestBody String postData) {
//        JSONObject jsonObject = JSONObject.parseObject(postData);
//        Integer userId = jsonObject.getInteger("userId");
//        //获取订单编号
//        String orderId = jsonObject.getString("orderId");
//        //通过订单查询订单详情
//        OrderInfo orderInfoByOrder = orderService.getOrderInfoByOrder(orderId);
//        //获取订单号
//        String waybillNumber = jsonObject.getString("waybillNumber");
//        //获取当前操作人员ID
//        Integer adminId = jsonObject.getInteger("adminId");
//        try {
//            User user = userService.selectUserInfoByUserId(userId);
//            if (user.getOpenIdPublic() != null && !"".equals(user.getOpenIdPublic())) {
//                //使用公众号发送模板消息
//                sendUtils.Template tem = new sendUtils.Template();
//                tem.setTemplateId("qn3N2KqQgx-_k9L7ryxBzPszFm11b1KtMF0fIy1qtlw");  //模版id
//                tem.setTopColor("#00DD00");  //字体颜色
//                tem.setToUser(user.getOpenIdPublic());  //用户openId
//                tem.setUrl("");
//                List<TemplateParam> paras = new ArrayList<TemplateParam>();
//                paras.add(new TemplateParam("first", "亲，宝贝已经启程了，好想快点来到你身边:", "#FF3333"));  //
//                paras.add(new TemplateParam("delivername", "UU跑腿", "#0044BB"));
//                paras.add(new TemplateParam("ordername", waybillNumber, "#0044BB"));
//                paras.add(new TemplateParam("remark", "感谢你对我们商城的支持!!!!", "#AAAAAA"));
//                tem.setTemplateParamList(paras);
//                String accessToken = weChatService.selectByPrimaryKey(99).getPartnerKey();
//                boolean result = WeChatSend.sendTemplateMsg(accessToken, tem);
//            } else {
//                //使用小程序发送模板消息
//                //获取form表单ID用于发送模板消息
//                //从数据库查询formId对象
//                FormId formId1 = formIdService.selectFormId();
//                String formId = formId1.getNumber();
//                //获取商品名
//                String goodsName = goodsService.getGoodsName(orderId);
//                if (waybillNumber != null) {
//                    orderInfoByOrder.setWaybillNumber(waybillNumber);
//                }
//                //获取微信token
//                String token = weChatService.selectByPrimaryKey(100).getPartnerKey();
//                //推送模板消息
//                Boolean aBoolean = WeChatConfig.sendTemplateMessageMax(user.getOpenId(), formId, "cz4opek_FACBptVin8o8M5lxtUiRQKNUhPTxJ-O6yKU", goodsName, orderInfoByOrder.getCreateTime(), orderId, waybillNumber, "UU跑腿", orderInfoByOrder.getDeliveryTime(), token);
//                if (aBoolean) {
//                    //推送成功删除使用过的formId
//                    formIdService.deleteFormIdById(formId1.getId());
//                }
//            }
//            //设置状态为已发货并记录发货时间
//            orderInfoByOrder.setOrderCode("已发货");
//            orderInfoByOrder.setDeliveryTime(DateUtil.formatLongDateTime(new Date()));
//            orderInfoByOrder.setWaybillNumber(waybillNumber);
//            //更新操作
//            orderService.updateOrderPro(orderInfoByOrder);
//            AdminOrder ao = new AdminOrder();
//            ao.setOperateId("order" + orderInfoByOrder.getOrderId());
//            ao.setOperateTime(DateUtil.formatLongDateTime(new Date()));
//            ao.setAdminId(adminId);
//            ao.setOperate("修改订单--发货");
//            am.insertSelective(ao);
//            return buildSuccessResult();
//        } catch (Exception e) {
//            logger.error("classname:WeChatController,method:seleteAdminUser", e);
//        }
//        return buildFailedResult();
//    }


}
